
/**
获取用户的地址
1.获取用户对小程序授予的权限状态 getSetting      authSetting["scope.address"]
2.如果 为true || undefined 直接进入获取地址
   wx.chooseAddress
3.如果为false
  1）先诱导用户授权   wx.openSetting
  2）然后获取地址 wx.chooseAddress
4.获取到的数据存入本地存储中
   wx.setStorageSync
*/

/*
用户地址有无的切换
页面初始化完毕==》   在这里有一个onload 但是频繁的出现 不建议所以用onShow 
  1）获取缓存里面的数据
  2）复值给data里面的一个变量
*/

/**
 * 商品的渲染
 * 1.获取到缓存中的数据
 * 2.把数据给data
 * 
 * 商品全选的功能实现  在 onShow
 * 1.拿到数组遍历后，
 * 2.判断所有checked为true就是全选，否则就不是全选
 * 3.给data
 * 
 * 底部价格的功能实现
 * 拿到所有数组遍历  用forEach遍历
 * 1.总价格   = 商品单个价格 * 数量  先给个初始值
 * 2.结算数量  = 商品的数量  先给个初始值
 * 3.给data
 * 
 * 商品的选中
 * 1.绑定change事件
 * 2.拿到car数组
 * 3.获取到当前商品的对象  data - id 拿
 * 4.对当前对象的check 进行取反
 * 5。所有  总价格 全选 结算数量 进行更改
 * 
 */


import regeneratorRuntime from '../../lib/runtime/runtime';
import {getSetting,chooseAddress,openSetting} from '../../utils/async.js'
Page({

  data: {
    address:{},
    car:[],
    allcheck:false,
    allsum:0,
    allnum:0
  },
  onLoad: function (options) {

  },
  onShow(){
    let address=wx.getStorageSync('address');
    let car=wx.getStorageSync('car') || [];

    // every遍历数组方法，每一项都为true返回true 则返回false
    // 如果 car是一个空数组 则every返回true  所以要用判断  v 代表每一循环组项
    // const allcheck = car.length!==0?car.every(v=>v.check):false
    this.setCart(car);

    
    
    this.setData({
      address
    })
  },
  async handaddress(){
    try{
      // 获取授权的状态为true还是false || undefined
      const res1 = await getSetting();
      // 拿到授权的真实状态
      const scopeAddress = res1.authSetting["scope.address"]
      // 判断，true || undefined  直接调用地址false 
      if(scopeAddress === true || scopeAddress === undefined){
        const res2 = await  chooseAddress();
        // console.log(res2)
        wx.setStorageSync('address', res2)
      }else{
        // false  诱导用户自己打开授权，然后获取用户地址
        await openSetting();
        let address = await  chooseAddress();
        // address.aa = address.provinceName+address.cityName+address.countyName+address.detailInfo;
        // 把获取到的地址存入缓存中 
        wx.setStorageSync("address",address)

      }
    }catch(err){
      // 这是如果获取状态为false 进入到的页面
      console.log(err)
    }
        

  },

  // checked  选择触发的事件
  handcheck(e){
    // 拿到对象
    const id = e.currentTarget.dataset.id;
    // 拿到数组
    const {car} = this.data;
    // 通过id找到对象 的索引
    const item = car.findIndex(v=>v.goods_id == id)
    car[item].check = !car[item].check
    
    // 调用封装好的改数据的代码
    this.setCart(car);
    
  },
  setCart(car){

    let allsum =0;
    let allnum = 0;
    let allcheck = true;
    // 遍历car数组
    car.forEach(v=>{
      // 判断
      if(v.check){

        allsum += v.goods_price * v.num
        allnum += v.num
      }else{
        allcheck =false;
      }
    })
     allcheck = car.length!==0?allcheck:false
    
    this.setData({
      car,
      allcheck,
      allsum,
      allnum
    })
    wx.setStorageSync('car', car)
  }

})